package br.com.vti.sisp_sicrim.antigo.model;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.vti.sisp_sicrim.antigo.dao.SicOcorrenciasDAO;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;

@SuppressWarnings("serial")
public class SicOcorrencias implements Serializable {

	private String id = "";
	private Long regEstadualGeralOcorr = 0L;
	private Integer artigoOcorr = 0;
	private String incisoOcorr = "";
	private String alineaOcorr = "";
	private Integer paragrafoOcorr = 0;
	private Integer leiOcorr = 0;
	private Integer anoLeiOcorr = 0;
	// private int maxincidenciasCriminaisOcorr = 0;
	private String[] incidenciasCriminaisOcorr = new String[200];
	private ResultSet consulta = null;
	private ResultSet consultaIncidenciasCriminaisOcorr = null;
	private SicOcorrenciasDAO sicOcorrenciasDAO = new SicOcorrenciasDAO();

	public SicOcorrencias() {
		super();
	}

	public SicOcorrencias(String id, Long regEstadualGeralOcorr, Integer artigoOcorr, String incisoOcorr, String alineaOcorr, Integer paragrafoOcorr, Integer leiOcorr, Integer anoLeiOcorr) {
		super();
		this.id = id;
		this.regEstadualGeralOcorr = regEstadualGeralOcorr;
		this.artigoOcorr = artigoOcorr;
		this.incisoOcorr = incisoOcorr;
		this.alineaOcorr = alineaOcorr;
		this.paragrafoOcorr = paragrafoOcorr;
		this.leiOcorr = leiOcorr;
		this.anoLeiOcorr = anoLeiOcorr;
	}

	public void grava() {

		try {
			this.id = sicOcorrenciasDAO.insert(regEstadualGeralOcorr, artigoOcorr, incisoOcorr, alineaOcorr, paragrafoOcorr, leiOcorr, anoLeiOcorr);
			gravaIncidenciasCriminaisOcorr();
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void gravaIncidenciasCriminaisOcorr() {
		for (int seq = 1; seq <= 199; seq++) {
			sicOcorrenciasDAO.insertIncidenciasCriminaisOcorr(this.id, seq, this.incidenciasCriminaisOcorr[seq]);
		}

	}

	public void atualiza() {

		try {
			sicOcorrenciasDAO.update(this.id, regEstadualGeralOcorr, artigoOcorr, incisoOcorr, alineaOcorr, paragrafoOcorr, leiOcorr, anoLeiOcorr);
			atualizaIncidenciasCriminaisOcorr();
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void atualizaIncidenciasCriminaisOcorr() {
		for (int seq = 1; seq <= 199; seq++) {
			sicOcorrenciasDAO.updateIncidenciasCriminaisOcorr(this.id, seq, this.incidenciasCriminaisOcorr[seq]);
		}

	}

	public boolean pesquisaRegEstadualGeralOcorr(Long pRegEstadualGeralOcorr) {

		try {
			if (consulta == null) {
				consulta = sicOcorrenciasDAO.findRegEstadualGeralOcorr(pRegEstadualGeralOcorr);
			} else {
				consulta = sicOcorrenciasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean fimDados() {
		return !(sicOcorrenciasDAO.temProximo());
	}

	public void salvarQuebras() {

	}

	public void formataAtributos(ResultSet lista) {

		if (lista == null)
			return;
		try {
			this.id = lista.getString("id");
			this.regEstadualGeralOcorr = lista.getLong("regEstadualGeralOcorr");
			this.artigoOcorr = lista.getInt("artigoOcorr");
			this.incisoOcorr = lista.getString("incisoOcorr");
			this.alineaOcorr = lista.getString("alineaOcorr");
			this.paragrafoOcorr = lista.getInt("paragrafoOcorr");
			this.leiOcorr = lista.getInt("leiOcorr");
			this.anoLeiOcorr = lista.getInt("anoLeiOcorr");
			formataIncidenciasCriminaisOcorr(this.id);
		} catch (SQLException e) {
		}
	}

	public void formataIncidenciasCriminaisOcorr(String id) {
		int seq;
		consultaIncidenciasCriminaisOcorr = sicOcorrenciasDAO.pesquisaIncidenciasCriminaisOcorr(id);
		while (consultaIncidenciasCriminaisOcorr != null) {
			try {
				seq = consultaIncidenciasCriminaisOcorr.getInt("seq");
				this.incidenciasCriminaisOcorr[seq] = consultaIncidenciasCriminaisOcorr.getString("incidenciasCriminaisOcorr");
				consultaIncidenciasCriminaisOcorr = sicOcorrenciasDAO.proximoIncidenciasCriminaisOcorr();
			} catch (SQLException e) {
			}
		}

	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Long getRegEstadualGeralOcorr() {
		return regEstadualGeralOcorr;
	}

	public void setRegEstadualGeralOcorr(Long regEstadualGeralOcorr) {
		this.regEstadualGeralOcorr = regEstadualGeralOcorr;
	}

	public Integer getArtigoOcorr() {
		return artigoOcorr;
	}

	public void setArtigoOcorr(Integer artigoOcorr) {
		this.artigoOcorr = artigoOcorr;
	}

	public String getIncisoOcorr() {
		return incisoOcorr;
	}

	public void setIncisoOcorr(String incisoOcorr) {
		this.incisoOcorr = incisoOcorr;
	}

	public String getAlineaOcorr() {
		return alineaOcorr;
	}

	public void setAlineaOcorr(String alineaOcorr) {
		this.alineaOcorr = alineaOcorr;
	}

	public Integer getParagrafoOcorr() {
		return paragrafoOcorr;
	}

	public void setParagrafoOcorr(Integer paragrafoOcorr) {
		this.paragrafoOcorr = paragrafoOcorr;
	}

	public Integer getLeiOcorr() {
		return leiOcorr;
	}

	public void setLeiOcorr(Integer leiOcorr) {
		this.leiOcorr = leiOcorr;
	}

	public Integer getAnoLeiOcorr() {
		return anoLeiOcorr;
	}

	public void setAnoLeiOcorr(Integer anoLeiOcorr) {
		this.anoLeiOcorr = anoLeiOcorr;
	}

	public String[] getIncidenciasCriminaisOcorr() {
		return incidenciasCriminaisOcorr;
	}

	public void setIncidenciasCriminaisOcorr(String[] incidenciasCriminaisOcorr) {
		this.incidenciasCriminaisOcorr = incidenciasCriminaisOcorr;
	}

	public String getIncidenciasCriminaisOcorr(int index) {
		return incidenciasCriminaisOcorr[index];
	}

	public void setIncidenciasCriminaisOcorr(int index, String incidenciasCriminaisOcorr) {
		this.incidenciasCriminaisOcorr[index] = incidenciasCriminaisOcorr;
	}

	public void fecha() {
		sicOcorrenciasDAO.fecha();
		consulta = null;
	}

	public long registrosProcessados() {
		return sicOcorrenciasDAO.nroRegistro;
	}

	public long totalRegistros() {
		return sicOcorrenciasDAO.qtdRegistros;
	}

}
